package com.Book.test_1_25_springmvcbook.config;

import com.Book.test_1_25_springmvcbook.interceptor.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.Arrays;
import java.util.List;

@Configuration
public class WebConfig implements WebMvcConfigurer {
    // 这个类实现 拦截器的注册
    // 在使用的时候也是需要实现一个 接口 WebMvcConfigurer
    // 这个接口里面其中一个配置就是添加拦截器

    // 注入进来
    @Autowired
    private LoginInterceptor loginInterceptor;
    private static List<String> excludePaths = Arrays.asList(
            "/user/login",
            "/css/**",
            "/js/**",
            "/pic/**",
            "/**/*.html"
    );
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //WebMvcConfigurer.super.addInterceptors(registry);



        // 接下来添加我们自己写的拦截器
       // registry.addInterceptor(new LoginInterceptor()); // 这是第一种实现方法
        // 第二种实现方法是交给Spring 管理
        // 用@@Configuration 注解
        registry.addInterceptor(loginInterceptor)
                .addPathPatterns("/**") // /** 表示给所有方法都添加拦截器
                .excludePathPatterns("/user/login")// 这个方法表示不拦截谁, 不拦截登录页面
                //.excludePathPatterns("/book/**");// 这里通过 把前端文件统一放到新建的book 文件夹 里面的方式组织拦击
                    // 之后再访问登录界面的话就要多一个 book 路径

                // 当然还有其他组织拦截的方法
                // .excludePathPatterns("/**/*.js") //排除前端静态资源
                // .excludePathPatterns("/**/*.css")
                // .excludePathPatterns("/**/*.png")
                // .excludePathPatterns("/**/*.html");  // 一一拦截

                // 或者这样写
                // excludePathPatterns 支持链表或者数组的方式进行输入
                //  在上面构造一个要阻止拦截的 链表,放入文件路径
                 .excludePathPatterns(excludePaths);//设置拦截器排除拦截的路径

        // 这就是在执行方法之前先执行拦截器

        // 写拦截器的注意事项: @Configuration 要把这个注解加上
    }
}
